// e32.groovy
/*
We shall say that an n-digit number is pandigital if it makes use of all the digits 1 to n exactly once; for example, the 5-digit number, 15234, is 1 through 5 pandigital.

The product 7254 is unusual, as the identity, 39 X 186 = 7254, containing multiplicand, multiplier, and product is 1 through 9 pandigital.

Find the sum of all products whose multiplicand/multiplier/product identity can be written as a 1 through 9 pandigital.

HINT: Some products can be obtained in more than one way so be sure to only include it once in your sum.
*/

boolean isBad(n) {
    n = n.toString()
    n.toList().unique().size() != n.length() || n.contains('0')
}

map = [:]
result = [] as Set

for (i in 2..98765) {
    if (isBad(i)) continue
    for (j in 2..98765) {
        if (isBad(j)) continue
        def t = "${i}${j}"
        if (t.length() > 5) break
        if (isBad(t)) continue
        def r = i * j
        t = "${t}${r}"
        if (t.length() != 9) continue
        if (!isBad(t)) {
            println "${i} * ${j} = ${r}"
            result << r
        }
    }
}

println result
println result.sum()
println "Done!"
